题面传送门:P15929 [TOPC 2021] Olympic Ranking
变量意义 (题中未给出)
为英文单词 gold 缩写,代表金牌个数;
为英文单词 silver 缩写,代表银牌个数;
为英文单词 bronze 缩写,代表铜牌个数。
题目大意
给出各国金银铜牌获得数量,根据特定排序规则寻找第一名。
思路讲解
注意到题中每个国家有多个信息,且需要根据一部分信息对其排序,因此可使用结构体,此时排序的重点在于排序规则的定义。
代码实现
结构体定义 & 排序规则
struct oly{ int g,s,b; string name;}a[305];bool cmp(oly x,oly y){ if(x.g!=y.g) return x.g>y.g;//如果金牌数不等,则多者在前 if(x.s!=y.s) return x.s>y.s;//如果银牌数不等,则多者在前 return x.b>y.b;//其他情况则按铜牌数排序}完整代码
#include<bits/stdc++.h>using namespace std;int n;struct oly{ int g,s,b; string name;}a[305];bool cmp(oly x,oly y){ if(x.g!=y.g) return x.g>y.g; if(x.s!=y.s) return x.s>y.s; return x.b>y.b;}int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i].g>>a[i].s>>a[i].b; getline(cin,a[i].name);//输入国名可能包含空格 a[i].name.erase(0,1);//国名会在前多一个空格,使用此函数进行删除 } sort(a+1,a+n+1,cmp); cout<<a[1].name; return 0;}













